package com.hospital.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户实体类（统一用户管理）
 *
 * @author Hospital Management System
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("tb_user")
public class User extends BaseEntity {

    /**
     * 用户名
     */
    @NotBlank(message = "用户名不能为空")
    @TableField("username")
    private String username;

    /**
     * 密码
     */
    @TableField("password")
    private String password;

    /**
     * 真实姓名
     */
    @NotBlank(message = "真实姓名不能为空")
    @TableField("name")
    private String name;

    /**
     * 手机号码
     */
    @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "手机号格式不正确")
    @TableField("phone")
    private String phone;

    /**
     * 邮箱
     */
    @Email(message = "邮箱格式不正确")
    @TableField("email")
    private String email;

    /**
     * 性别（0未知 1男 2女）
     */
    @TableField("gender")
    private Integer gender;

    /**
     * 出生日期
     */
    @TableField("birth_date")
    private LocalDate birthDate;

    /**
     * 身份证号
     */
    @Pattern(regexp = "^$|^\\d{17}[\\dXx]$", message = "身份证号格式不正确")
    @TableField("id_card")
    private String idCard;

    /**
     * 地址
     */
    @TableField("address")
    private String address;

    /**
     * 头像URL
     */
    @TableField("avatar")
    private String avatar;

    /**
     * 用户角色（1患者 2医生 3管理员）
     */
    @TableField("role")
    private Integer role;

    /**
     * 账号状态（0禁用 1启用）
     */
    @TableField("status")
    private Integer status;

    // ==================== 医生相关字段 ====================

    /**
     * 医生工号
     */
    @TableField("doctor_no")
    private String doctorNo;

    /**
     * 所属科室ID
     */
    @TableField("department_id")
    private Long departmentId;

    /**
     * 职称
     */
    @TableField("title")
    private String title;

    /**
     * 专业特长
     */
    @TableField("specialty")
    private String specialty;

    /**
     * 教育背景
     */
    @TableField("education")
    private String education;

    /**
     * 工作经历
     */
    @TableField("experience")
    private String experience;

    /**
     * 挂号费
     */
    @TableField("consultation_fee")
    private BigDecimal consultationFee;

    /**
     * 工作年限
     */
    @TableField("work_years")
    private Integer workYears;

    /**
     * 紧急联系人
     */
    @TableField("emergency_contact")
    private String emergencyContact;

    /**
     * 紧急联系电话
     */
    @TableField("emergency_phone")
    private String emergencyPhone;

    /**
     * 毕业院校
     */
    @TableField("graduate_school")
    private String graduateSchool;

    /**
     * 执业证书号
     */
    @TableField("license_number")
    private String licenseNumber;

    /**
     * 个人简介
     */
    @TableField("introduction")
    private String introduction;

    // ==================== 管理员相关字段 ====================

    /**
     * 管理员工号
     */
    @TableField("admin_no")
    private String adminNo;

    /**
     * 职位
     */
    @TableField("position")
    private String position;

    /**
     * 权限列表（JSON格式）
     */
    @TableField("permissions")
    private String permissions;

    /**
     * 最后登录时间
     */
    @TableField("last_login_time")
    private LocalDateTime lastLoginTime;

    /**
     * 最后登录IP
     */
    @TableField("last_login_ip")
    private String lastLoginIp;

    // ==================== 关联查询字段 ====================

    /**
     * 科室名称（来自department表）
     */
    @TableField(exist = false)
    private String departmentName;

    /**
     * 科室代码（来自department表）
     */
    @TableField(exist = false)
    private String departmentCode;

    /**
     * 年龄（计算字段）
     */
    @TableField(exist = false)
    private Integer age;
} 